package com.beantools.util;

import static com.beantools.util.StringUtil.isBlank;
import static com.beantools.util.StringUtil.isNotBlank;

/**
 * 这是对象的工具类，主要判断对象是否为空
 *
 * @author baoya
 * @version 1.0
 * @since 1.1.0
 */
public class ObjectUtil {

    /**
     * 该方法用来判断空对象，同时支持字符串的判断。
     * 可以使用Apache下面的{@code commons-lang3}jar包，其官方地址为：
     * <p>
     * <a href="http://commons.apache.org/proper/commons-lang/">commons-lang3</a>
     *
     * @param obj 传入的对象，包含字符串对象；
     *            如果是字符串对象，需要向下转型
     * @return 如果是空对象，则返回true，否则，返回false
     */
    public static boolean isNull(Object obj) {
        if (obj instanceof String) {
            if (obj instanceof String) {
                return isBlank((String) obj);
            }
        }
        return null == obj ? true : false;
    }

    /**
     * 该方法用来判断变长数组是否全部为空，同时支持字符串的判断。
     * 可以使用Apache下面的{@code commons-lang3}jar包，其官方地址为：
     * <p>
     * <a href="http://commons.apache.org/proper/commons-lang/">commons-lang3</a>
     *
     * @param obj 传入的变常数组对象，包含字符串对象；
     *            如果是字符串对象，需要向下转型
     * @return 如果是全部为空，则返回true，否则，返回false
     */
    public static boolean isAllNull(Object... obj) {
        if (ArrayUtil.isNoNullObject(obj)) {
            return false;
        }
        for (Object o : obj) {
            if (isNotNull(o)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 该方法用来判断变长数组是否包含空对象，同时支持字符串的判断。
     * 可以使用Apache下面的{@code commons-lang3}jar包，其官方地址为：
     * <p>
     * <a href="http://commons.apache.org/proper/commons-lang/">commons-lang3</a>
     *
     * @param obj 传入的变常数组对象，包含字符串对象；
     *            如果是字符串对象，需要向下转型
     * @return 如果是全部为空，则返回true，否则，返回false
     */
    public static boolean contaninsNull(Object... obj) {
        if (ArrayUtil.isEmpty(obj)) {
            return true;
        }
        for (Object o : obj) {
            if (isNull(o)) {
                return true;
            }
        }
        return false;
    }


    /**
     * 该方法用来判断变长数组的是否没有空值，同时支持字符串的判断。
     * 可以使用Apache下面的{@code commons-lang3}jar包，其官方地址为：
     * <p>
     * <a href="http://commons.apache.org/proper/commons-lang/">commons-lang3</a>
     *
     * @param obj 传入的变常数组对象，包含字符串对象；
     *            如果是字符串对象，需要向下转型
     * @return 如果是全部为空，则返回true，否则，返回false
     */
    public static boolean noAnyNull(Object... obj) {
        if (ArrayUtil.isEmpty(obj)) {
            return false;
        }
        for (Object o : obj) {
            if (isNull(o)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 该方法用来判断空对象，同时支持字符串的判断。
     * 可以使用Apache下面的{@code commons-lang3}jar包，其官方地址为：
     * <p>
     * <a href="http://commons.apache.org/proper/commons-lang/">commons-lang3</a>
     *
     * @param obj 传入的对象，包含字符串对象；
     *            如果是字符串对象，需要向下转型
     * @return 如果是对象不为空，则返回true，否则，返回false
     */
    public static boolean isNotNull(Object obj) {
        if (obj instanceof String) {
            if (obj instanceof String) {
                return isNotBlank((String) obj);
            }
        }
        return null != obj ? true : false;
    }

}
